package com.qiongqi.datadir.domain;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class BucketQuota extends BaseDomain{
    private String name;      // 桶名称
    private long quota;       // 配额上限（字节），-1 表示无限制
    private long currentSize; // 当前已使用大小（字节）
    private String purpose;  // 创建目的
    private List<BucketData> datas; // 参与资源
    private long duration; // 有效期（天）
    private List<String> compliances; // 隐私与数据安全法规
    private List<String> participants; // 隐私与数据安全法规

    public void increase(long size) {
        this.currentSize += size;
    }

    public void decrease(long size) {
        this.currentSize = Math.max(0, this.currentSize - size);
    }

    public boolean isOverQuota(long additionalSize) {
        if (quota == -1) return false; // 无配额限制
        return (currentSize + additionalSize) > quota * 1073741824;
    }

    /**
     * 生成默认Bean的Builder方法
     * @return
     */
    public static BucketQuota createDefault() {
        return createDefault(null);
    }

    /**
     * 生成默认Bean的Builder方法
     * @return
     */
    public static BucketQuota createDefault(String name) {
        return BucketQuota.builder()
                .name(name)
                .quota(-1)
                .currentSize(0)
                .purpose(null)
                .datas(null)
                .duration(-1)
                .compliances(null)
                .participants(null)
                .build();
    }
}
